{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5d904dee",
   "metadata": {},
   "source": [
    "# Example 1: Function Fitting\n",
    "\n",
    "In this example, we will cover how to leverage grid refinement to maximimze KANs' ability to fit functions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94056ef6",
   "metadata": {},
   "source": [
    "intialize model and create dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0a59179d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cpu\n",
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    }
   ],
   "source": [
    "from kan import *\n",
    "\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print(device)\n",
    "\n",
    "# initialize KAN with G=3\n",
    "model = KAN(width=[2,1,1], grid=3, k=3, seed=1, device=device)\n",
    "\n",
    "# create dataset\n",
    "f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2)\n",
    "dataset = create_dataset(f, n_var=2, device=device)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb1f817e",
   "metadata": {},
   "source": [
    "Train KAN (grid=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a87b97b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 1.36e-02 | test_loss: 1.39e-02 | reg: 1.17e+01 | : 100%|█| 20/20 [00:03<00:00,  6.55it\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.1\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, opt=\"LBFGS\", steps=20);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52294efd",
   "metadata": {},
   "source": [
    "The loss plateaus. we want a more fine-grained KAN!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3f1cfc9d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.2\n"
     ]
    }
   ],
   "source": [
    "# initialize a more fine-grained KAN with G=10\n",
    "model = model.refine(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3cc5079",
   "metadata": {},
   "source": [
    "Train KAN (grid=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "898b1794",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 5.92e-04 | test_loss: 6.16e-04 | reg: 1.17e+01 | : 100%|█| 20/20 [00:04<00:00,  4.87it"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.3\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, opt=\"LBFGS\", steps=20);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcdc0d3d",
   "metadata": {},
   "source": [
    "The loss becomes lower. This is good! Now we can even iteratively making grids finer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a1c25e8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cpu\n",
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 1.35e-02 | test_loss: 1.39e-02 | reg: 1.12e+01 | : 100%|█| 200/200 [00:14<00:00, 14.00\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.1\n",
      "saving model version 0.2\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 7.25e-03 | test_loss: 7.19e-03 | reg: 1.12e+01 | : 100%|█| 200/200 [00:14<00:00, 13.72\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.3\n",
      "saving model version 0.4\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 4.74e-04 | test_loss: 4.96e-04 | reg: 1.12e+01 | : 100%|█| 200/200 [00:15<00:00, 12.77\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.5\n",
      "saving model version 0.6\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 7.72e-05 | test_loss: 1.06e-04 | reg: 1.12e+01 | : 100%|█| 200/200 [00:12<00:00, 16.41\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.7\n",
      "saving model version 0.8\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 2.72e-05 | test_loss: 6.12e-05 | reg: 1.12e+01 | : 100%|█| 200/200 [00:14<00:00, 13.68\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.9\n",
      "saving model version 0.10\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 1.89e-05 | test_loss: 6.10e-05 | reg: 1.12e+01 | : 100%|█| 200/200 [00:13<00:00, 15.24"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.11\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "from kan import *\n",
    "\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print(device)\n",
    "\n",
    "# create dataset\n",
    "f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2)\n",
    "dataset = create_dataset(f, n_var=2, device=device, train_num=1000)\n",
    "\n",
    "\n",
    "grids = np.array([3,5,10,20,50,100])\n",
    "#grids = np.array([3,10])\n",
    "\n",
    "\n",
    "train_losses = []\n",
    "test_losses = []\n",
    "steps = 200\n",
    "k = 3\n",
    "\n",
    "for i in range(grids.shape[0]):\n",
    "    if i == 0:\n",
    "        model = KAN(width=[2,1,1], grid=grids[i], k=k, seed=0, device=device)\n",
    "    if i != 0:\n",
    "        model = model.refine(grids[i])\n",
    "    results = model.fit(dataset, opt=\"LBFGS\", steps=steps)\n",
    "    train_losses += results['train_loss']\n",
    "    test_losses += results['test_loss']\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6be8ba55",
   "metadata": {},
   "source": [
    "Training dynamics of losses display staircase structures (loss suddenly drops after grid refinement)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "156f68a2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGwCAYAAABFFQqPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCf0lEQVR4nO3deXxU9b3/8feZyb4TIAmBkIBAIYY1ICKgKBSKFgXbqhRZtPXWa6wiV2vV/lyoirdai20DrfaKba1XWgvqtVaJFQkVZNOIEpFFICCBEJasZJs5vz+GDIQkZAYmcyaZ1/PxyCOZc7455zPflszb7/me7zFM0zQFAAAQhGxWFwAAAGAVghAAAAhaBCEAABC0CEIAACBoEYQAAEDQIggBAICgRRACAABBK8TqAgKd0+nUwYMHFRsbK8MwrC4HAAB4wDRNVVRUKDU1VTZb6+M+BKE2HDx4UGlpaVaXAQAAzsP+/fvVq1evVvcThNoQGxsrydWRcXFxFlcDAAA8UV5errS0NPfneGsIQm1ovBwWFxdHEAIAoINpa1oLk6UBAEDQIggBAICgRRACAABBizlCAABYxOFwqL6+3uoyOqTQ0FDZ7fYLPg5BCAAAPzNNU4cOHdKJEyesLqVDS0hIUEpKygWt80cQakVubq5yc3PlcDisLgUA0Mk0hqCkpCRFRUWxYK+XTNNUdXW1SkpKJEk9evQ472MZpmmaviqsMyovL1d8fLzKysq4fR4AcMEcDod27NihpKQkde3a1epyOrSjR4+qpKREAwYMaHaZzNPPbyZLAwDgR41zgqKioiyupONr7MMLmWdFEAIAwAJcDrtwvuhDghAAAAhaBCEAABC0CEIAAMDvMjIytHjxYqvL4PZ5qxytrFV1nUNdosMUE87/DACAwDdhwgQNGzbMJwFm06ZNio6OvvCiLhAjQha592+favwvVuvtrcVWlwIAgE+YpqmGhgaP2nbv3j0g7pwjCFnkqsq39FjIMiUcK7C6FACAxUzTVHVdgyVfni4nOG/ePK1Zs0bPPfecDMOQYRh66aWXZBiG3n33XY0cOVLh4eFau3atdu/ereuuu07JycmKiYnRqFGj9N577zU53tmXxgzD0B/+8AfNmDFDUVFR6t+/v958801fdnOLuCZjkSEnN2hoyEdaXzHO6lIAABY7We9Q5sPvWnLuwoVTFBXWdhx47rnntGPHDmVlZWnhwoWSpG3btkmSfvKTn+iZZ55R3759lZCQoAMHDujqq6/W448/roiICP3xj3/UtGnT9OWXX6p3796tnuOxxx7TL37xCz399NP6zW9+o1mzZmnfvn1KTEz0zZttASNCFjGNUytgOj0bQgQAwErx8fEKCwtTVFSUUlJSlJKS4l7NeeHChfrmN7+piy66SF27dtXQoUP1ox/9SIMHD1b//v31+OOPq2/fvm2O8MybN08zZ85Uv3799OSTT6qqqkobN25s1/fFiJBFTMOVQU0nzzIDgGAXGWpX4cIplp37Qo0cObLJ66qqKj322GN66623dPDgQTU0NOjkyZMqKio653GGDBni/jk6OlqxsbHu54m1F4KQRUzjVNcThAAg6BmG4dHlqUB19t1f9913n959910988wz6tevnyIjI/Xd735XdXV15zxOaGhok9eGYcjpdPq83jN13F7v4BpHhGRyaQwA0DGEhYXJ4Wj7P+DXrl2refPmacaMGZKkyspK7d27t52rOz/MEWpFbm6uMjMzNWrUqHY5/uk5Qu2bdAEA8JWMjAxt2LBBe/fuVWlpaaujNf369dOKFStUUFCgTz/9VN///vfbfWTnfBGEWpGTk6PCwkJt2rSpfU7QOCLEpTEAQAdx7733ym63KzMzU927d291zs+vfvUrdenSRZdddpmmTZumKVOmaMSIEX6u1jNcGrOIe0TIJAgBADqGAQMGaP369U22zZs3r1m7jIwMvf/++0225eTkNHl99qWyltYzOnHixHnV6Q1GhCzC7fMAAFiPIGQVW2MQYkQIAACrEIQswqUxAACsRxCyyOlLYwQhAACsQhCyyqlLYwYjQgAAWIYgZBXWEQIAwHIEIYuY7hEh7hoDAMAqBCGLGEyWBgDAcgQhi5weEeLSGAAAViEIWYW7xgAAHcyECRM0f/58nx1v3rx5mj59us+Odz4IQlbhrjEAACxHELIKQQgA0IHMmzdPa9as0XPPPSfDMGQYhvbu3avCwkJdffXViomJUXJysmbPnq3S0lL377322msaPHiwIiMj1bVrV02aNElVVVV69NFH9cc//lFvvPGG+3gffPCB398XD121SONkaYIQAECmKdVXW3Pu0CjJMNps9txzz2nHjh3KysrSwoULJUkOh0NXXHGFbrvtNj377LM6efKk7r//ft1www16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3r17m5WVle42Tz31lBkbG2v+/e9/Nz/77DPzxhtvNHv06GGWl5e729x+++1mz549zby8PPPjjz82r7zySnPo0KFmQ0ODFW+r3W3cuNHMyMgwhwwZYt59993u7fTVaceOHTPT09PNefPmmRs2bDD37Nljvvfee+auXbvcbegvl8cff9zs2rWr+dZbb5l79uwx//a3v5kxMTHm4sWL3W2Cta/efvtt86GHHjL//ve/m5LMlStXNtnvq3751re+ZWZlZZnr1q0z161bZ2ZlZZnf/va3/fU2feJcfXXixAlz0qRJ5vLly83t27eb69evN0ePHm1mZ2c3OYaVfUUQssAll1xi3n777U22DRw40PzpT39qUUXWKykpMSWZa9asMU3TNJ1Op5mSkmI+9dRT7jY1NTVmfHy8+bvf/c40Tdc/sNDQUPPVV191t/n6669Nm81mvvPOO/59A35QUVFh9u/f38zLyzOvuOIKdxCir5q6//77zXHjxrW6n/467ZprrjFvvfXWJtuuv/568+abbzZNk75qdPaHu6/6pbCw0JRkfvTRR+4269evNyWZ27dvb+d31T5aCo1n27hxoynJ/R//VvcVl8b8rK6uTlu2bNHkyZObbJ88ebLWrVtnUVXWKysrkyQlJiZKkvbs2aNDhw416afw8HBdccUV7n7asmWL6uvrm7RJTU1VVlZWp+zLnJwcXXPNNZo0aVKT7fRVU2+++aZGjhyp733ve0pKStLw4cP1wgsvuPfTX6eNGzdO//rXv7Rjxw5J0qeffqp///vfuvrqqyXRV63xVb+sX79e8fHxGj16tLvNpZdeqvj4+E7bd5Lr771hGEpISJBkfV/x0FU/Ky0tlcPhUHJycpPtycnJOnTokEVVWcs0TS1YsEDjxo1TVlaWJLn7oqV+2rdvn7tNWFiYunTp0qxNZ+vLV199VR9//LE2bdrUbB991dRXX32lpUuXasGCBXrwwQe1ceNG3XXXXQoPD9ecOXPorzPcf//9Kisr08CBA2W32+VwOPTEE09o5syZkvj/Vmt81S+HDh1SUlJSs+MnJSV12r6rqanRT3/6U33/+993P2DV6r4iCFnEMIwmr03TbLYtWNx5553aunWr/v3vfzfbdz791Nn6cv/+/br77ru1atUqRUREtNqOvnJxOp0aOXKknnzySUnS8OHDtW3bNi1dulRz5sxxt6O/pOXLl+vll1/WK6+8oosvvlgFBQWaP3++UlNTNXfuXHc7+qplvuiXltp31r6rr6/XTTfdJKfTqSVLlrTZ3l99xaUxP+vWrZvsdnuzBFtSUtLsvy6CwY9//GO9+eabWr16tXr16uXenpKSIknn7KeUlBTV1dXp+PHjrbbpDLZs2aKSkhJlZ2crJCREISEhWrNmjX79618rJCTE/V7pK5cePXooMzOzybZBgwapqKhIEv/fOtN9992nn/70p7rppps0ePBgzZ49W/fcc48WLVokib5qja/6JSUlRYcPH252/CNHjnS6vquvr9cNN9ygPXv2KC8vzz0aJFnfVwQhPwsLC1N2drby8vKabM/Ly9Nll11mUVX+Z5qm7rzzTq1YsULvv/+++vTp02R/nz59lJKS0qSf6urqtGbNGnc/ZWdnKzQ0tEmb4uJiff75552qLydOnKjPPvtMBQUF7q+RI0dq1qxZKigoUN++femrM4wdO7bZUgw7duxQenq6JP6/dabq6mrZbE0/Bux2u/v2efqqZb7qlzFjxqisrEwbN250t9mwYYPKyso6Vd81hqCdO3fqvffeU9euXZvst7yvLmiqNc5L4+3z//M//2MWFhaa8+fPN6Ojo829e/daXZrf/Od//qcZHx9vfvDBB2ZxcbH7q7q62t3mqaeeMuPj480VK1aYn332mTlz5swWb0/t1auX+d5775kff/yxedVVV3X423Y9ceZdY6ZJX51p48aNZkhIiPnEE0+YO3fuNP/yl7+YUVFR5ssvv+xuQ3+5zJ071+zZs6f79vkVK1aY3bp1M3/yk5+42wRrX1VUVJiffPKJ+cknn5iSzGeffdb85JNP3Hc6+apfvvWtb5lDhgwx169fb65fv94cPHhwh7t9/lx9VV9fb1577bVmr169zIKCgiZ/72tra93HsLKvCEIWyc3NNdPT082wsDBzxIgR7tvGg4WkFr+WLVvmbuN0Os1HHnnETElJMcPDw83LL7/c/Oyzz5oc5+TJk+add95pJiYmmpGRkea3v/1ts6ioyM/vxv/ODkL0VVP/93//Z2ZlZZnh4eHmwIEDzeeff77JfvrLpby83Lz77rvN3r17mxEREWbfvn3Nhx56qMkHVLD21erVq1v8GzV37lzTNH3XL0ePHjVnzZplxsbGmrGxseasWbPM48eP++ld+sa5+mrPnj2t/r1fvXq1+xhW9pVhmqZ5YWNKAAAAHRNzhAAAQNAiCAEAgKBFEAIAAEGLIAQAAIIWQQgAAAQtghAAAAhaBCEAABC0CEIAACBoEYQAAEDQIggB6PTmzZun6dOnW10GgABEEAIAAEGLIASg03jttdc0ePBgRUZGqmvXrpo0aZLuu+8+/fGPf9Qbb7whwzBkGIY++OADSdLXX3+tG2+8UV26dFHXrl113XXXae/eve7jNY4kPfbYY0pKSlJcXJx+9KMfqa6uzpo3CMDnQqwuAAB8obi4WDNnztQvfvELzZgxQxUVFVq7dq3mzJmjoqIilZeXa9myZZKkxMREVVdX68orr9T48eOVn5+vkJAQPf744/rWt76lrVu3KiwsTJL0r3/9SxEREVq9erX27t2rW265Rd26ddMTTzxh5dsF4CMEIQCdQnFxsRoaGnT99dcrPT1dkjR48GBJUmRkpGpra5WSkuJu//LLL8tms+kPf/iDDMOQJC1btkwJCQn64IMPNHnyZElSWFiYXnzxRUVFReniiy/WwoULdd999+nnP/+5bDYG1YGOjn/FADqFoUOHauLEiRo8eLC+973v6YUXXtDx48dbbb9lyxbt2rVLsbGxiomJUUxMjBITE1VTU6Pdu3c3OW5UVJT79ZgxY1RZWan9+/e36/sB4B+MCAHoFOx2u/Ly8rRu3TqtWrVKv/nNb/TQQw9pw4YNLbZ3Op3Kzs7WX/7yl2b7unfv3ub5GkeRAHRsBCEAnYZhGBo7dqzGjh2rhx9+WOnp6Vq5cqXCwsLkcDiatB0xYoSWL1/ungTdmk8//VQnT55UZGSkJOmjjz5STEyMevXq1a7vBYB/cGkMQKewYcMGPfnkk9q8ebOKioq0YsUKHTlyRIMGDVJGRoa2bt2qL7/8UqWlpaqvr9esWbPUrVs3XXfddVq7dq327NmjNWvW6O6779aBAwfcx62rq9MPfvADFRYW6p///KceeeQR3XnnncwPAjoJRoQAdApxcXHKz8/X4sWLVV5ervT0dP3yl7/U1KlTNXLkSH3wwQcaOXKkKisrtXr1ak2YMEH5+fm6//77df3116uiokI9e/bUxIkTm4wQTZw4Uf3799fll1+u2tpa3XTTTXr00Uete6MAfMowTdO0uggACETz5s3TiRMn9Prrr1tdCoB2wtguAAAIWgQhAAAQtLg0BgAAghYjQgAAIGgRhAAAQNAiCAEAgKBFEAIAAEGLIAQAAIIWQQgAAAQtghAAAAhaBCEAABC0/j+0UwxhBSRI0gAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(train_losses)\n",
    "plt.plot(test_losses)\n",
    "plt.legend(['train', 'test'])\n",
    "plt.ylabel('RMSE')\n",
    "plt.xlabel('step')\n",
    "plt.yscale('log')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ed8d26b",
   "metadata": {},
   "source": [
    "Neural scaling laws (For some reason, this got worse than pykan 0.0. We're still investigating the reason, probably due to the updates of curve2coef)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8301085c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'RMSE')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_params = 3 * grids\n",
    "train_vs_G = train_losses[(steps-1)::steps]\n",
    "test_vs_G = test_losses[(steps-1)::steps]\n",
    "plt.plot(n_params, train_vs_G, marker=\"o\")\n",
    "plt.plot(n_params, test_vs_G, marker=\"o\")\n",
    "plt.plot(n_params, 100*n_params**(-4.), ls=\"--\", color=\"black\")\n",
    "plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "plt.legend(['train', 'test', r'$N^{-4}$'])\n",
    "plt.xlabel('number of params')\n",
    "plt.ylabel('RMSE')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2c521e5e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
